#include "estructuras.h"
#include <time.h>

int main(int argc, char *argv[])
{
	srand(time(NULL));				/* Semilla para que que la funcion random pueda variar */
	char mensaje[120];
	int random = rand()%10 + 1;			/* Variable random para ver si cambio la tabla de proveedores */
	t_proveedor proveedor;
	m_kanbanproveedor msg_kproveedor;
	m_kanbanproveedor msg_kproveedor_resp;		/* Mensaje que se devuelve al sector que solicito stock */
	int colaid;
	key_t clave_cola;

	/* Obtengo la clave de la cola */
	clave_cola = ftok(DIRECTORIO, COLA_EXTERNA);

	if ( (colaid = msgget(clave_cola, 0666)) < 0 )						/* Obtengo el ID de la cola */
	{
		sprintf(mensaje, "Error al obtener el ID de la cola Externa\n");
		write(fileno(stdout), mensaje, strlen(mensaje));

		exit(-1);
	}

	printf("Espero Kanban de Proveedor\n");
	printf("\n");

	/* Bucleo infinitamente esperando mensajes de los otros procesos */
	while(1)
	{
		/* Espero para recibir un mensaje */
		if ( msgrcv(colaid, (m_kanbanproveedor *) &msg_kproveedor, sizeof(m_kanbanproveedor), MSG_PROVEEDOR, 0) < 0 )
		{
			sprintf(mensaje, "Error al recibir Kanban de Proveedor\n");
			write(fileno(stdout), mensaje, strlen(mensaje));

			exit(-1);
		}

		printf("+-----------------------------------+\n");
		printf("| Recibi pedido Kanban de Proveedor |\n");
		printf("+-----------------------------------+\n");
		printf("Cantidad: %d\n", msg_kproveedor.cantidad);
		printf("Sector: %d\n", msg_kproveedor.sector);
		printf("Estado: %d\n", msg_kproveedor.entregada);
		printf("\n");

		printf("Generando materiales solicitados...\n");
		printf("\n");
		sleep(rand()%10);

		/* Armo el mensaje que voy a devolver al sector que lo solicito */
		msg_kproveedor_resp.mtype = msg_kproveedor.sector;
		msg_kproveedor_resp.sector = msg_kproveedor.sector;
		msg_kproveedor_resp.cantidad = msg_kproveedor.cantidad;
		msg_kproveedor_resp.tugger = 0;
		msg_kproveedor_resp.darsena = 0;
		msg_kproveedor_resp.cantidadEntregada = msg_kproveedor.cantidad;
		msg_kproveedor_resp.fechaEntrega = 0;
		msg_kproveedor_resp.horaEntrega = 0;
		msg_kproveedor_resp.entregada = 1;

		if ( msgsnd(colaid, (m_kanbanproveedor *) &msg_kproveedor_resp, sizeof(m_kanbanproveedor), 0) < 0 )	
		{
			sprintf(mensaje, "Error al responder el Kanban de Proveedor a %ld\n", msg_kproveedor_resp.sector);
			write(fileno(stdout), mensaje, strlen(mensaje));

			exit(-1);
		}
		printf("Se envio stock a:\n");
		printf("Sector: %d\n", msg_kproveedor_resp.sector);
		printf("Cantidad: %d\n", msg_kproveedor_resp.cantidad);
		printf("\n");
	}
 return 0;
}
